
//实例化编辑器
//建议使用工厂方法getEditor创建和引用编辑器实例，如果在某个闭包下引用该编辑器，直接调用UE.getEditor('editor')就能拿到相关的实例
/* var ue = UE.getEditor('editor'); */
var ue = UE.getEditor('editor', {wordCount:false,elementPathEnabled:false});

/**
 * date: 2018年2月23日
 * 
 * js循环遍历节点,并将纯文本包装(wrap)
 * 递归遍历元素节点,
 * (1)遇到文本节点,wrap;
 * (2)遇到标签递归,
 * 
 * [ typeof ](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/typeof)
 * console.log( (typeof ele) , $(ele).text() );
 * 
 * update at 2018年2月27日, 优化代码,加入对`<p><br></p>`类型元素的判断
 * 
 */
var LoopInlineNodes = (function () {
	var regexp = new RegExp("(<.+?>).+(<\/.+?>)");
	var noCloseTagArr = ['br','hr'];// 这些元素可以不用闭合: br,hr,img,input,li,p
	var htmlStr = null;
    /**
     * 构造函数
     */
	function LoopInlineNodes() {
        htmlStr = '';
    }
    /**
     * 简单一个元素是否在一个数组中
     */
    function checkInArr(val, arr, ignoreCase){
    	var flag = false;
    	var val = val || '';
    	var arr = arr || [];
    	/**
    	 * var ignoreCase = ignoreCase || true;
    	 * 1) JS陷阱: 上面的代码是不可取的, 如果传入`false`计算的值也是true
    	 * var ignoreCase = (ignoreCase == undefined ? true : false);
    	 * 2) 上面的代码也是不可取的, 如果传入`true`计算的值也是false
    	 * var ignoreCase = (ignoreCase == undefined ? true : ignoreCase);
    	 * 3) 上面的写法才是正确的
    	 */
    	var ignoreCase = (ignoreCase === undefined ? true : ignoreCase);
    	var len = arr.length;
    	for(var i=0;i<len;i++){
    		if(ignoreCase){
    			if( val.toString().toUpperCase() === arr[i].toString().toUpperCase() ){
    				flag = true;
    				break;
    			}
    		}else{
    			if( val.toString() === arr[i].toString() ){
    				flag = true;
    				break;
    			}
    		}
    	}
    	return flag;
    }
    /**
     * 核心代码,递归
     */
    function _loop(ele){
        if (ele.nodeType === 3) {
        	var text = $(ele).text();
            var len = text.length;
            for (var i = 0; i < len; i++) {
                htmlStr += '<span class="emr">' + text[i] + '</span>';
            }
        }
        else {
            var startTag = '';
            var endTag = '';
            var tagName = $(ele).get(0).tagName;

            /**
             * 这里只考虑"br","hr"; img,input,li不用考虑
             */
            if( checkInArr(tagName,['br','hr']) ){
            	startTag = $(ele)[0].outerHTML;
            	endTag = '';
            }else{
            	if (regexp.test($(ele)[0].outerHTML)) {
                    startTag = RegExp.$1;
                    endTag = RegExp.$2;
                }
            }
            
            htmlStr += startTag;
            var contentsArr = $(ele).contents();
            if (contentsArr && contentsArr.length > 0) {
                $.each(contentsArr, function (i, n) {
                	_loop(n);
                });
            }
            htmlStr += endTag;
        }
    }
    LoopInlineNodes.prototype.getHtmlStr = function () {
        return htmlStr;
    };
    LoopInlineNodes.prototype.loop = function (ele) {
    	_loop(ele);
    };
    LoopInlineNodes.prototype.checkInArr = checkInArr;
    return LoopInlineNodes;
}());


/**
 * date: 2018年2月27日
 * 
 */
var seedId = 1;


$(function(){
	
	/**
	 * date: 2018年2月27日
	 */
	$('#btnTable').on('click', function(){
		var table = null;
		var howManyTrs = null;
		
		/**
		 * 没法挪到外面定义,因为百度UE可能还没有完全加载完毕！
		 */
		var ue = UE.getEditor('editor');
		var ifrdoc = ue.iframe.contentWindow.document;
		var body = $('body', ifrdoc);
		
		body.empty();
		body.append('<table><tbody><tr class="firstRow"><td width="311" valign="top"></td><td width="311" valign="top"></td></tr><tr><td width="311" valign="top"></td><td width="311" valign="top"></td></tr><tr><td width="311" valign="top"></td><td width="311" valign="top"></td></tr></tbody></table>');
		table = body.find('table').eq(0);
		/**
		 * 得到table中tr的数量,如果只有一个tr,就不用再拆分啦
		 */
		howManyTrs = table.find('tr').length;
		console.log('howManyTrs: ', howManyTrs);
		
		body.empty();
		body.append('<table><tbody><tr class="firstRow"><td width="145" valign="top"></td><td width="145" valign="top"></td><td width="145" valign="top"></td><td width="145" valign="top"></td></tr></tbody></table>');
		table = body.find('table').eq(0);
		howManyTrs = table.find('tr').length;
		console.log('howManyTrs: ', howManyTrs);
	});
	
	/**
	 * date: 2018年2月27日
	 */
	$('#btnSpan').on('click', function(){
		var paragraph = null;
		var isSingleLine = false;
		
		var lin = null; // LoopInlineNodes
		var _newid = null;
		var emrArray = null;
		var len = null;
		var firstPos = null;
		var lastPos = null;
		
		/**
		 * 没法挪到外面定义,因为百度UE可能还没有完全加载完毕！
		 */
		var ue = UE.getEditor('editor');
		var ifrdoc = ue.iframe.contentWindow.document;
		var body = $('body', ifrdoc);
		
		body.empty();
		body.append('<p>中华人民共和国中</p>');
		paragraph = body.find('p').eq(0);
		
		if(paragraph.attr('id')){}else{
			paragraph.attr('id', 'id_'+(seedId++));
		}
		lin = new LoopInlineNodes();
		lin.loop( paragraph.get(0) );
		_newid = paragraph.attr('id')+'_0'+(seedId++);
		paragraph.attr('id', _newid);
		// $('#span002').attr('id', _newid );
		$('#'+_newid, ifrdoc).before( lin.getHtmlStr() );
		console.log( lin.getHtmlStr() );
		$('#'+_newid, ifrdoc).remove();
		emrArray = body.find('span.emr');
		len = emrArray.length;
		console.log('len: ', len);
		firstPos = $(emrArray[0]).position();
		lastPos = $(emrArray[len-1]).position();
		console.log("firstPos: ", firstPos);
		console.log("lastPos: ", lastPos);
		if(firstPos.top === lastPos.top){
			isSingleLine = true;
		}else{
			isSingleLine = false;
		}
		console.log('isSingleLine: ', isSingleLine);
		
		// 再运行一次,向body中加入一个多行的段落
		
		body.empty();
		body.append('<p>中华人民共和国中中华人民共和国中中华人民共和国中中华人民共和国中中华人民共和国中中华人民共和国中中华人民共和国中中华人民共和国中中华人民共和国中中华人民共和国中中华人民共和国中中华人民共和国中</p>');
		paragraph = body.find('p').eq(0);
		
		if(paragraph.attr('id')){}else{
			paragraph.attr('id', 'id_'+(seedId++));
		}
		lin = new LoopInlineNodes();
		lin.loop( paragraph.get(0) );
		_newid = paragraph.attr('id')+'_0'+(seedId++);
		paragraph.attr('id', _newid);
		// $('#span002').attr('id', _newid );
		$('#'+_newid, ifrdoc).before( lin.getHtmlStr() );
		console.log( lin.getHtmlStr() );
		$('#'+_newid, ifrdoc).remove();
		emrArray = body.find('span.emr');
		len = emrArray.length;
		console.log('len: ', len);
		firstPos = $(emrArray[0]).position();
		lastPos = $(emrArray[len-1]).position();
		console.log("firstPos: ", firstPos);
		console.log("lastPos: ", lastPos);
		if(firstPos.top === lastPos.top){
			isSingleLine = true;
		}else{
			isSingleLine = false;
		}
		console.log('isSingleLine: ', isSingleLine);
	});
	
});


